﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Windows.Forms;

namespace CProd
{
    public partial class frmSaveLinhas_Tarefas : Form
    {
        #region Declarações

        SqlConnection Conn = new SqlConnection();
        SqlDataAdapter daDados;
        DataTable dtDados = new DataTable("dtDados");
        DataView dvDados;
        DateTime DataIn, DataFim;

        #endregion

        public frmSaveLinhas_Tarefas()
        { InitializeComponent(); }

        private void frmSaveLinhas_Tarefas_Load(object sender, EventArgs e)
        {
            daDados = new SqlDataAdapter("SELECT * From Linhas_Tarefas", frmEntrada.Conn);
            daDados.Fill(dtDados);
            dvDados = dtDados.DefaultView;
            dvDados.Sort = "Linha Asc";

            int myRowCount = dvDados.Count;

            if (myRowCount > 0)
            {
                this.dvDados.Table.Columns[3].ColumnName = "Descricao";
                #region Preenche Combos
                for (int i = 0; i < myRowCount; i++)
                {
                    if (i == 0)
                    {
                        this.cbLinhas1.Items.Add(dvDados[i]["Linha"].ToString().Trim());
                        this.cbLinhas2.Items.Add(dvDados[i]["Linha"].ToString().Trim());
                    }
                    else
                    {
                        if (dvDados[i]["Linha"].ToString() != dvDados[i - 1]["Linha"].ToString())
                        {
                            this.cbLinhas1.Items.Add(dvDados[i]["Linha"].ToString().Trim());
                            this.cbLinhas2.Items.Add(dvDados[i]["Linha"].ToString().Trim());
                        }
                    }
                }
                #endregion
                this.cbLinhas1.SelectedIndex = 0;
                this.cbLinhas2.SelectedIndex = 0;
            }
        }

        private void btnSair_Click(object sender, EventArgs e)
        { this.Close(); }

        private void btSave_Click(object sender, EventArgs e)
        {
            DataIn = Convert.ToDateTime(this.dtInicio.Text);
            DataFim = Convert.ToDateTime(this.dtFim.Text);

            if (dtDados.Rows.Count > 0)
            {
                dvDados.RowFilter = "[Linha] >= '" + this.cbLinhas1.SelectedItem.ToString() + "' and [Linha] <= '" + this.cbLinhas2.SelectedItem.ToString() +
                     "' and [Data] >= '" + DataIn.Year + "-" + DataIn.Month.ToString("00") + "-" + DataIn.Day.ToString("00") +
                    "' and [Data] < '" + DataFim.Year + "-" + DataFim.Month.ToString("00") + "-" + DataFim.AddDays(1).Day.ToString("00") + "'";

                dvDados.Sort = "Id Asc";

                if (dvDados.Count > 0)
                {
                    SaveFileDialog svFile = new SaveFileDialog();
                    svFile.AddExtension = true;
                    svFile.Filter = "Vírgula Flutuante(*.csv)|*.csv|Ficheiro de Texto(*.txt)|*.txt";
                    svFile.DefaultExt = "*.*";

                    if (svFile.ShowDialog() == System.Windows.Forms.DialogResult.OK) DataTableToTextFile(dvDados, svFile.FileName);
                }
                else
                    MessageBox.Show("Não tem dados para gravar.");
            }
            else
                MessageBox.Show("Não tem dados para gravar.");
        }

        //Converts the Given Datatable to TextFile
        public void DataTableToTextFile(DataView dvToText, string filePath)
        {
            StreamWriter sw = null;
            try
            {
                sw = new StreamWriter(filePath);
                for (int i = 1; i < dvToText.Table.Columns.Count; i++) sw.Write(dvToText.Table.Columns[i].ColumnName + ";");
                sw.WriteLine ("N.O. Produçao;Lote;Cod. Produto;D. Produto;Cod. Cliente;D. Cliente;Kilos;Unidades;N. Encomenda;P. Encomenda;Tempo;Fieira;N. Fieiras");
                
                //For Data in the Rows
                foreach (DataRowView row in dvToText)
                {
                    if (row["Estado"].ToString() == "Em Producao")
                    {
                        string[] Ordem = row["Observacoes"].ToString().Replace('"',' ').Split('#');

                        for (int i = 1; i < 7; i++) sw.Write(row[i].ToString() + ";");
                        sw.Write(";"); sw.Write(row[8].ToString() + ";"); sw.Write(row[9].ToString() + ";");
                        
                        for (int i = 0; i < Ordem.Length; i++) sw.Write(Ordem[i].ToString() + ";");
                    }
                    else
                        for (int i = 1; i < dvToText.Table.Columns.Count; i++) sw.Write(row[i].ToString() + ";");
                    sw.WriteLine();
                }
                sw.Close();
                MessageBox.Show("Ficheiro Gravado com sucesso", "");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}